home *** CD-ROM | disk | FTP | other *** search
/ Amiga Collections: Franz PD / Franz PD Disk #250 (1993)(Rhein-Sieg-Soft).zip / Franz PD Disk #250 (1993)(Rhein-Sieg-Soft).adf / Z80 / z80.Anleitung < prev    next >
Text File  |  1993-08-10  |  28KB  |  949 lines

  1.                         18.4.1993
  2.  
  3.  
  4.         Z80 Crossassembler V1.0
  5.  
  6.  
  7.  
  8.        Copyright Jürgen Eder
  9.  
  10.              Hermann-Hesse-Weg 7
  11.              W-7316 Köngen
  12.              (neue Postleitzahl: 73257 Köngen)
  13.  
  14.  
  15.  
  16. Auf dieser Diskette befindet sich nur eine DEMO-Version.
  17.  
  18. Das heißt: Es können nur Z80-Programme mit max.
  19.        50 Quellcode-Zeilen assembliert werden, alle 
  20.        anderen Funktionen sind in keinster Weise 
  21.        beeinträchtigt. Sie können also den Crossassembler 
  22.        vor dem Kauf zunächst testen.
  23.  
  24.        Wenn Sie die Vollversion möchten, schicken Sie
  25.        bitte 30.- DM (z.B. per Verrechnungsscheck) 
  26.        an obige Adresse. Sie bekommen dann umgehend:
  27.        
  28.        - Die aktuelle Vollversion
  29.        
  30.        - Die ausgedruckte Anleitung
  31.        
  32.        
  33.        (Rücksendeadresse bitte nicht vergessen !!!)
  34.        
  35.  
  36.  
  37. Anleitung:
  38.  
  39.  
  40. 1.0    Hard- und Softwareanforderung:
  41.  
  42. Hardwareanforderung:
  43. 512 k RAM,
  44. Diskettenlaufwerk
  45.  
  46. Softwareanforderung:
  47. Amiga-OS 2.04
  48. ASCII-Editor
  49.  
  50. Bemerkung:
  51. Der Assembler sollte auch unter Amiga-OS 1.2 und 
  52. 1.3 funktionieren, wenn er im CLI aufgerufen wird.
  53. (siehe "Aufruf des Assemblers")
  54.  
  55.  
  56.  
  57.  
  58.  
  59. 1.1    Installation:
  60.  
  61. Zur Installation klicken Sie das Verzeichnis Z80 an und 
  62. schieben es dorthin, wo Sie es haben wollen. (Drag- und 
  63. Drop-Prinzip). Wenn Sie das Icon über dem Ziel wieder los-
  64. lassen, wird der Assembler kopiert.
  65. (Anmerkung: Siehe auch Anleitung zum Amiga: "Kopieren von 
  66. Verzeichnissen") 
  67.  
  68. Selbstverständlich kann auch die Originaldiskette bzw. die 
  69. Sicherheitskopie zum Arbeiten verwendet werden.
  70.  
  71. Bei Installation auf eine Diskette, ist es am besten, wenn 
  72. Sie sich die Workbench-Diskette zuerst kopieren und dann 
  73. nicht benötigte Dateien von dieser Diskette löschen (z.B. 
  74. Zeichensätze...) um Platz zu schaffen. Dann braucht nur 
  75. noch das Verzeichnis Z80 auf diese 'Arbeitsdiskette' ko-
  76. piert werden. (Vorgehen siehe oben) 
  77.  
  78.  
  79.  
  80.  
  81. 1.2    Aufruf des Assemblers
  82. 1.2.1    Aufruf aus dem CLI
  83.  
  84. Der Assembler wird durch Angabe des Programmnamens 
  85. "Z80Ass" und der Parameter aufgerufen.
  86.  
  87. Folgende Syntax muß dabei eingehalten werden:
  88.  
  89. Z80Ass [-behl?] Quellendateiname
  90.  
  91. Die Angaben in der rechteckigen Klammer müssen nur mit an
  92. gegeben werden, wenn eine Ausgabe erwünscht wird. Fehlen 
  93. diese Angaben erfolgt keine Ausgabe. Es wird dann zwar der 
  94. Assembler gestartet und die Quellendatei geladen aber der 
  95. Quelltext wird nur auf Fehler überprüft und gegebenenfalls 
  96. wird eine Fehlerdatei erzeugt. Fehlt auch die Angabe 
  97. "Quellendateiname" so wird automatisch versucht ein Window 
  98. auf der Workbench zu öffnen. Das weitere Vorgehen ist dann 
  99. wie beim Aufruf von der Workbench.
  100.  
  101. Das Ausgabeformat kann durch setzen verschiedener 
  102. 'Schalter' angegeben werden. (Das Minuszeichen muß dann 
  103. ebenfalls eingegeben werden!)
  104.  
  105.  
  106. Erklärung der Schalter:
  107.  
  108. - ?
  109. Beschreibung aller möglichen Flags des Assemblers beim 
  110. Aufruf.
  111.  
  112. - b
  113. Es wird eine Binärdatei generiert. Diese Datei enthält den 
  114. Maschinencode Ihres Programms. Der Dateiname ist derselbe 
  115. wie der Name des Quellcodes, nur mit  der Erweiterung 
  116. ".bin". 
  117.  
  118. - e
  119. Es wird eine Epromdatei generiert. Diese Datei enthält den 
  120. Maschinencode Ihres Programms und kann dann mit einem 
  121. EPROM-Programmiergerät weiterverarbeitet werden. Der Da-
  122. teiname ist derselbe wie der Name des Quellcodes, nur mit  
  123. der Erweiterung ".epr". 
  124.  
  125. - h
  126. Es wird eine Hexdatei generiert. Der Dateiname ist  der
  127. selbe wie der Name des Quellcodes, nur mit der Erweiterung 
  128. ".hex". Diese Datei enthält Ihr eingebenes Programm eben
  129. falls als Maschinencode. Aber der Aufbau ist anders als 
  130. bei einer Binärdatei. Der Maschinencode ist hier erstens 
  131. Hexadezimal im ASCII Code abgespeichert, und zweitens 
  132. steht am Anfang jeder Zeile die 16-Bit Adresse, an der die 
  133. Daten dann nachher stehen sollen.
  134.  
  135. - l
  136. Es wird ein Listing generiert. Der Dateiname ist derselbe 
  137. wie der Name des Quellcodes, nur mit der Erweiterung 
  138. ".lst". Außerdem wird noch eine Symboltabelle generiert 
  139. mit der Erweiterung ".sym".
  140.  
  141.  
  142. Bemerkung:
  143. Der Aufruf aus einer Shell (CLI) funktioniert auch unter 
  144. Betriebssystemen kleiner als 2.04 solange nicht versucht 
  145. wird das Window zu öffnen. Das heißt: der Aufruf des As-
  146. semblers ohne jegliche Parameter funktioniert erst ab 
  147. OS-2.04.
  148.  
  149. Beispiel:
  150.  
  151. Z80Ass -lb Z80Test.asm
  152. Assembliert die Quellendatei "Z80Test.asm" und erzeugt ein 
  153. Listing, eine Symboltabelle und eine Binärdatei.
  154.  
  155. Z80Ass ? oder Z80Ass -? Test.asm
  156. Es wird eine kurze Erklärung zur Aufrufkonvention des As-
  157. sembler ausgegeben. Der Assemblerlauf wird nicht gestar-
  158. tet!
  159.  
  160. Z80Ass
  161. Ab Amiga-OS 2.04 wird ein Window geöffnet, in dem Sie dann 
  162. alle Eingaben komfortabel mit der Maus erledigen können.
  163.  
  164.  
  165.  
  166.  
  167. 1.2.2    Aufruf von der Workbench (ab Amiga-OS 2.04)
  168.  
  169. Das Programm wird mit einem Doppelklick auf das Icon ge-
  170. startet und öffnet dann ein Window in dem alle notwendigen 
  171. Einstellungen ganz einfach und komfortabel durch Anklicken 
  172. der entsprechenden "Schalter" ein- und ausgeschaltet wer-
  173. den können. Sie entsprechen den Schaltern, die auch beim 
  174. Aufruf aus dem CLI mit angegeben werden können und sind im 
  175. Abschnitt 1.2.1 bereits erklärt worden.
  176. Durch den Menüpunkt "Projekt->Laden" kann die Quellendatei 
  177. einfach durch Anklicken ausgewählt werden. Gestartet wird 
  178. der Assembler dann durch Anklicken von "Start".
  179.  
  180.  
  181.  
  182.  
  183. 1.3    Zeilensyntax und Eingabeformat
  184.  
  185. Die Quellendatei ist eine normale Textdatei, die mit jedem 
  186. beliebigen Texteditor erzeugt werden kann. Die einzige Be-
  187. dingung ist, das der Editor die Ausgabedatei im ASCII-Code 
  188. schreiben kann. (z.B.: Ed, der mit Amiga-OS 2.04 mitgelie-
  189. fert wird)
  190.  
  191. Es wird die offizielle Z80-Mnemonik-Schreibweise unter
  192. stützt. Um die Assemblerbefehle des Z80 zu erlernen ver-
  193. wenden Sie bitte anderweitige Literatur zum Z80 bzw. sehen 
  194. Sie sich das Programm "Z80-Hilfe" an. In diesem Programm 
  195. werden alle Befehle des Z80 kurz erklärt.
  196.  
  197. Aufbau einer typischen Assemblerzeile:
  198.  
  199. [Label[:]] Z80-Befehl [Parameter1,Paramter2]    [;Kommentar]
  200.  
  201. Beispiel:
  202. Loop:    LD    A,B    ;eine Beispielzeile
  203.  
  204. Bemerkungen:
  205. - Die Zeilenlänge darf in der Version 1.0 die Länge von 
  206. 255 Zeichen NICHT überschreiten !
  207. - Bei Befehle mit ZWEI Parameter dürfen zwischen den 
  208. Parametern KEINE Leerzeichen stehen!
  209. - Der Z80 kennt auch ein Register AF` (gesprochen: AF 
  210. gestrichen). Das '`' befindet sich auf den deutschen 
  211. Tastaturen über der Tabulator-Taste.
  212.  
  213.  
  214.  
  215.  
  216. 1.4    Ausdrücke
  217. 1.4.1    Symbolsyntax
  218.  
  219. Ein Label beginnt mit einem Buchstabe oder einem Unter
  220. strich, die weitere Zeichenfolge ist dann beliebig. Ein 
  221. Label kann beliebig lang sein, alle Zeichen sind dabei si-
  222. gnifikant zur Unterscheidung. Die Groß- und Kleinschrei-
  223. bung ist dabei gleichwertig. d.h.: Loop oder loOP bezeich-
  224. nen dieselbe Variable.
  225.  
  226. Bemerkung:
  227. Variable dürfen nicht nach Z80-Befehle, oder den Direkti-
  228. ven benannt werden. Außerdem wird eine Variable Namens 
  229. "PC" als Synonym für den "Programmcounter" verwendet. Der 
  230. Zähler hat als aktuellen Wert immer den Counterinhalt, der 
  231. am Beginn der aktuellen Zeile gültig war. Das gilt auch 
  232. für die Direktiven. Insbesondere bei DB- und DW-Direktiven 
  233. wird der Counter innerhalb einer Zeile nicht weiterge-
  234. zählt, sondern er hat konstant den Wert, den er am Anfang 
  235. dieser Zeile hatte!
  236.  
  237.  
  238.  
  239.  
  240. 1.4.2    Rechenregeln
  241.  
  242. Wenn z.B. Zahlen als Parameter verwendet werden, kann 
  243. durch Anhängen eines Buchstabens das Zahlensystem angege-
  244. ben werden. Fehlt diese Angabe, wird das Dezimalsystem 
  245. vorausgesetzt.
  246.  
  247. Folgende Systeme können definiert werden:
  248.  
  249. D oder kein Buchstabe    : Dezimalzahl
  250. O            : Oktalzahl
  251. H            : Hexadezimalzahl
  252. B            : Dualzahl
  253.  
  254.  
  255. Beispiel:
  256. 4dh ist eine Hexadezimalzahl, 10 oder 10d ist eine Dezi-
  257. malzahl, 10011b ist eine Dualzahl usw..
  258. Weiterhin kann ein String als Folge von ASCII-Codes nach  
  259. z.B. DB-Direktiven in doppelten Hochkommas angegeben wer-
  260. den. z.B. DB "Das ist ein String" ist eine gültige Zeile. 
  261. Der Inhalt wird in die entsprechenden ASCII-Codes umgewan-
  262. delt. Außerdem kann statt einer Zahl auch EIN Zeichen in 
  263. einfachen Hochkommas verwendet werden. (auf deutschen Ta-
  264. staturen ALT + ä) Der ASCII-Code dieses Zeichen wird dann 
  265. behandelt wie eine Zahl. Man kann damit auch rechnen.
  266. Also 'a'+3*'j' ist ebenfalls ein gültiger Ausdruck.
  267.  
  268. Bemerkung:
  269. Als Zahlen werden nur Zeichenketten erkannt, die auch mit 
  270. einer Ziffer beginnen. Wenn also z.B. eine Hexadezimale 
  271. Zahl F0H irgendwo in Ihrem Quellcode auftaucht, wird sie 
  272. als Variable interpretiert, da das erste Zeichen ein Buch-
  273. stabe ist. In solchen Fällen muß eine "0" (Null) vorange-
  274. stellt werden. Hier in diesem Beispiel muß es dann also 
  275. heißen: 0F0H.
  276.  
  277. Der Assembler versteht die Grundrechenarten: Addition, 
  278. Subtraktion, Multiplikation und Division außerdem weitere 
  279. mathematische und logische Ausdrücke (siehe unten). Eine 
  280. Formel wird nach Priorität ausgewertet, also die normale 
  281. Punkt vor Strich Regelung. Durch Klammerung kann diese Re-
  282. gelung umgangen werden. Da aber eine normale runde Klammer 
  283. '(' bzw. ')' bei manchen Befehlen für die indirekte Adres-
  284. sierungsart verwendet wird, sollte statt dessen in diesen 
  285. Fällen die eckige Klammer verwendet werden, also '[' bzw. 
  286. ']'. Um die Lesbarkeit eines Programmes zu erhöhen kann 
  287. aber auch die eckige Klammer grundsätzlich immer verwendet 
  288. werden. Der Assembler versteht beides.
  289.  
  290.  
  291. Beispiel:
  292.  
  293.     ld A,4*[3+2]        oder
  294.     ld B,'F'+3*2        usw.
  295.  
  296. Hier die Auflistung aller mathematischen Ausdrücke, die 
  297. der Assembler versteht. Sie ist nach der Priorität der 
  298. einzelnen Operatoren sortiert. Die höchste Priorität hat 
  299. der erste Operator in der Liste (Vorzeichen Plus). Die 
  300. niedrigste Priorität hat der letzte Operator (Addition).
  301.  
  302.    Operator          Bedeutung
  303.  
  304.     +        Vorzeichen: Plus
  305.     -        Vorzeichen: Minus
  306.     ~        Bitweises Negat
  307.     <        Low-Byte eines 16-Bit-Wertes 
  308.             (als Ergebnis bekommt man einen 8 Bit Wert)
  309.     >        High-Byte eines 16-Bit-Wertes
  310.             (als Ergebnis bekommt man einen 8 Bit Wert)
  311.     &        Bitweises UND
  312.     |        Bitweises ODER
  313.     ^        Potenzieren
  314.     /        Division
  315.     *        Multiplikation
  316.     -        Subtraktion
  317.     +        Addition
  318.  
  319.  
  320. Bemerkung:
  321. Leerzeichen innerhalb eines Ausdrucks sind verboten und 
  322. führen zu einem falschen Ergebnis. Es wird jedoch nicht 
  323. immer eine Fehlermeldung erzeugt!
  324.  
  325.  
  326.  
  327.  
  328.  
  329. 1.5    Die Direktiven
  330. 1.5.1    Steuerungsdirektiven
  331.  
  332. END
  333. Beendet den Assemblerlauf. Diese Direktive ist optional 
  334. und muß nicht unbedingt angegeben werden.
  335.  
  336. INCLUDE "Dateiname"
  337. Der Assembler unterbricht die Assemblierung der aktuellen 
  338. Quelldatei und schiebt das Includefile "Dateiname" in den 
  339. Assemblerlauf ein. Wenn diese neue Datei zu Ende ist, wird 
  340. im alten Quellfile fortgefahren.
  341.  
  342. SETLH
  343. Die DW-Direktive (siehe unten) generiert 16-Bit Werte. Die 
  344. Anordnung der zwei Bytes, also ob z.B. zuerst Low-Byte und 
  345. dann das High-Byte generiert wird, wird  durch SETLH bzw. 
  346. SETHL eingestellt. SETLH sorgt nun dafür, das zuerst das 
  347. Low-Byte und dann das High-Byte generiert wird. 
  348.  
  349. SETHL
  350. Durch diese Direktive wird zuerst das High-Byte und dann 
  351. das Low-Byte generiert. Dieses Verhalten ist auch beim 
  352. Start Voreingestellt und wird auch benutzt, wenn weder 
  353. SETHL noch SETLH im Quelltext verwendet werden.
  354.  
  355.  
  356.  
  357.  
  358.  
  359. 1.5.2    Zuweisungsdirektiven
  360.  
  361. ORG xxxx
  362. Damit wird die Startadresse angegeben, an der das Programm 
  363. später liegen soll. Es sind beliebig viele ORG Anweisungen 
  364. innerhalb einer Datei möglich. Die Adressen müssen nicht 
  365. unbedingt in aufsteigender Reihenfolge sein. d.h.: es kann 
  366. eine ORG 2000H - Anweisung vor ORG 1000H stehen.
  367.  
  368. ROM xxxx
  369. Durch diese Direktive wird die Startadresse des EPROMs an
  370. gegeben und ist nur sinnvoll wenn eine EPROM-Datei erzeugt 
  371. werden soll. Wenn also das EPROM später an der Adresse 
  372. 0C000H liegt, wird hinter der ROM-Direktive diese Adresse 
  373. geschrieben. Das Programm muß jedoch nicht unbedingt an 
  374. 0C000H beginnen, sondern kann genauso auch erst bei z.B. 
  375. 0CD00H beginnen.
  376. Normalerweise muß man beim Programmieren eines EPROMS die 
  377. Startadresse des Programms genau kennen, damit man die  
  378. Adresse des Programms an die Adresse des EPROMs anpassen 
  379. kann. In diesem Fall darf das Programm nicht von Beginn an 
  380. in das EPROM programmiert werden, sondern es muß um 00D00H 
  381. Bytes verschoben werden. Das heißt es kommen erst 'leere' 
  382. Bytes (im EPROM) und dann kommt das Programm. 
  383. Das alles wird durch diese Direktive berücksichtigt! In 
  384. der EPROM-Datei stehen nachher (in diesem Beispiel) zu
  385. nächst 00D00H 'leere' Bytes und dann kommt das Programm.
  386. (leere Bereiche zwischen einzelnen Programmteilen werden 
  387. ebenfalls auf diese Weise aufgefüllt) 
  388. Später beim Programmieren wird diese Datei einfach vom Be-
  389. ginn des EPROMs an eingeladen, die Startadresse des Pro-
  390. gramms ist dann damit bereits richtig berücksichtigt!
  391.  
  392. EQU oder =
  393. Einem Label wird ein Wert zugewiesen. Dies kann aber pro 
  394. Variable nur einmal verwendet werden! (Ansonsten Fehler
  395. meldung: "Label doppelt definiert")
  396. Beispiel:
  397.         Start equ     10
  398.         Daten =    2*8+3
  399.         usw.
  400.  
  401.  
  402. DEF
  403. Einem Label wird ein neuer Wert zugewiesen. Die Variable 
  404. muß aber bereits durch EQU (bzw "=") eingeführt worden 
  405. sein. DEF kann beliebig oft verwendet werden, man sollte 
  406. aber vorsichtig damit umgehen, da man damit sehr schnell 
  407. logische Fehler in den Quelltext einbauen kann, die sich 
  408. nur sehr schwer finden lassen.
  409. Beispiel:
  410.         Start equ    10
  411.         ...
  412.         Start def    92
  413.         ...
  414.  
  415. DS xx oder DEFS xx
  416. Platz reservieren für xx Bytes. (Bem.: pro DS - Direktive 
  417. können allerdings max. nur 255 Bytes reserviert werden.)
  418.  
  419. DB oder DEFB
  420. Nach dieser Direktive folgen Datenbytes. (8-Bit)
  421. Beispiel:
  422.         DB    0,1,2,3,4,5,...
  423.         DB    2,"Das ist ein Text",10,'a',10*2,001000B
  424.  
  425. DW oder DEFW
  426. Nach dieser Direktive folgen Datenwörter. (16-Bit)
  427. Beispiel:
  428.         DW    0,1,2,4000,.....
  429.         DW    2,"Text",'g',290,2FFFH,...
  430.         usw.
  431.  
  432.  
  433.  
  434.  
  435.  
  436. 1.5.3    Listingdirektiven
  437.  
  438. NOLIST oder LISTOFF
  439. Da eine Listingdatei bedingt durch z.B.: Includefiles sehr 
  440. groß werden kann, kann die Erzeugung des Listings durch 
  441. diese Direktive ausgeschaltet werden.
  442.  
  443. LIST oder LISTON
  444. Hiermit wird die Erzeugung des Listings wieder eingeschal-
  445. tet. Falls das Listing davor nicht ausgeschaltet wurde, 
  446. ändert diese Direktive am Ablauf jedoch nichts, da das Li-
  447. sting bereits ausgegeben wird.
  448.  
  449.  
  450.  
  451.  
  452.  
  453. 1.5.4    Bedingte Assemblierung
  454.  
  455. IFDEF xxxx
  456. Wenn der Ausdruck hinter IFDEF ungleich Null ist, wird 
  457. weiterassembliert, also alle Befehle nach dieser Direktive 
  458. ausgeführt bzw. assembliert. Wenn der Ausdruck gleich Null 
  459. ist, werden alle Zeilen bis zum ENDIF des Quellcodes über
  460. sprungen.
  461.  
  462. IFNDEF xxxx
  463. Wenn der Ausdruck hinter IFNDEF gleich Null ist, wird wei-
  464. terassembliert. Falls der Ausdruck jedoch ungleich Null 
  465. ist, werden alle Zeilen bis zum ENDIF übersprungen.
  466.  
  467. ENDIF
  468. Nach jedem IFDEF bzw. IFNDEF sollte ein ENDIF folgen. Oder 
  469. genauer gesagt, es sollten genau so viele ENDIF vorhanden 
  470. sein wie IFDEF plus IFNDEF im Quelltext vorhanden sind. 
  471. Ansonsten kommt es zu einer Fehlermeldung!
  472.  
  473.  
  474. Diese Direktiven sind rekursiv. Das heißt: es kann z.B. 
  475. eine IFNDEF nach einer IFDEF Anweisung folgen. Sollte die 
  476. IFDEF Direktive z.B. bereits ergeben, das nicht weiteras
  477. sembliert wird (Ausdruck gleich Null), dann wird zwar die 
  478. IFNDEF Anweisung nicht ausgeführt, aber es sollten in die
  479. sem Fall trotzdem zwei ENDIF-Direktiven folgen.
  480. Beispiel:
  481.  
  482. definition    EQU    1
  483.         ....
  484.         ld a,b        ;Quelltext
  485.         IFDEF     definition
  486.         ....        ;wieder Quelltext (wird ausgeführt)
  487.         IFNDEF definition
  488.         ld b,a        ;Text wird übersprungen
  489.         ....
  490.         ENDIF        ;Ende von 'IFNDEF'
  491.         ld c,a        ;diese Zeile wird wieder assembliert
  492.         
  493.         ENDIF        ;Ende von 'IFDEF'
  494.         ....
  495.         usw.
  496.  
  497.  
  498.  
  499.  
  500.  
  501. 1.5.5    Makros
  502.  
  503. Makros sind Zusammenfassungen mehrerer Quelltextzeilen, 
  504. die nach ihrer Definition in den Assemblerlauf eingescho-
  505. ben werden. Sie können mit Parametern versehen werden, so 
  506. daß Sie immer wiederkehrende Sequenzen von Quellzeilen nur 
  507. einmal eingeben müssen, auch wenn diese kleine Unterschie-
  508. de aufweisen. Ein Makro wird aufgerufen, indem sein Name 
  509. als 'Befehl' eingegeben wird.
  510. Dadurch kann der Quelltext kürzer und übersichtlicher 
  511. gehalten werden. Aber wohlgemerkt, nur der Quelltext wird 
  512. kleiner, das Programm selbst wird größer. Der Grund: bei 
  513. jedem Makroaufruf wird die komplette Sequenz assembliert, 
  514. genauso als wenn Sie die Zeilen dort stehen hätten.
  515. Um ein Makro verwenden zu können, muß es erst einmal defi-
  516. nert werden.
  517.  
  518. Label MAKRO 
  519. Durch diese Direktive ('MAKRO') wird das Makro definiert.
  520. Der Name muß vor dieser Anweisung, am Beginn der Zeile 
  521. stehen. Alle folgenden Quelltextzeilen gehören dann zu 
  522. diesem Makro und werden jedesmal, wenn der Makroname als 
  523. Befehl im Quelltext steht dann assembliert.
  524. Dem Makro können später beim Aufruf maximal 10 Argumente 
  525. als Parameter angegeben werden. In den Quelltextzeilen 
  526. während der Definition müssen diese Parameter durch eine 
  527. Zahl von 0 bis 9 und einem Vorangestellten Backslash ('\') 
  528. angegeben werden.
  529. Innerhalb einer Makrodefinition kann nicht mit einer neuen 
  530. Makrodefinition begonnen werden. Die Verschachtelung von 
  531. diesen Direktiven ist also unzulässig.
  532.  
  533. ENDM
  534. ENDM beendet dann die aktuelle Makroaufnahme. Das Makro 
  535. kann von nun an verwendet werden.
  536.  
  537. Beispiel:
  538.  
  539. Text1        MAKRO
  540.         DB    "Hallo, das ist ein Text",0
  541.         ENDM
  542.  
  543. Init        MAKRO        ;Makro mit 4 Parametern (0 bis 3)
  544. \3        ld    a,\0    ;hinter '\' steht die Parameternummer
  545.         ld    b,\1
  546.         ld    c,\2
  547.         ENDM
  548.  
  549. Aufgerufen werden diese Makros dann folgendermaßen:
  550.  
  551.         ....
  552.         Init     1,h,2,Lab1
  553.         call    u1prg
  554.         Init     h,4,0fh,Lab2
  555.         call    ...
  556.  
  557.         ....        ;irgend ein Quelltext
  558.         Text1        ;z.B. im Datenbereich
  559.  
  560.  
  561.  
  562.  
  563.  
  564.  
  565.  
  566. 1.6    AREXX - Schnittstelle
  567.  
  568. Durch eine AREXX-Schnittstelle läßt sich ein Programm so
  569. zusagen 'fernsteuern'. Ein anderes, gerade laufendes Pro
  570. gramm (z.B. ein Editor) kann dann dadurch z.B. die Ein
  571. stellungen vornehmen. (Datei angeben, Assembler starten 
  572. usw.)
  573.  
  574. Damit der Empfänger dieser 'Fernsteuerbefehle' eindeutig 
  575. gekennzeichnet ist, wird ein Briefkasten benötigt. Dieser 
  576. Briefkasten hat einen eindeutigen Namen und wird Port ge-
  577. nannt.
  578.  
  579. Der Z80 Crossassembler legt solch einen Port an, nachdem 
  580. das Window geöffnet wurde. Das heißt, das der AREXX-Port 
  581. erst ab Amiga-OS 2.04 verfügbar ist.
  582.  
  583. Der Portname hat folgenden Aufbau:
  584.  
  585. "REXX_Z80_x"
  586.  
  587. Das x bezeichnet eine Nummer. Beim ersten Start steht dort 
  588. eine Null ('0'). Wenn der Assembler nun noch einmal ge-
  589. startet wird, so das zwei Assembler gleichzeitig aktiv 
  590. sind, bekommt der als zweiter gestartete Assembler die 
  591. Nummer eins ('1') usw.. 
  592.  
  593. Insgesamt kennt der Assembler 7 AREXX-Befehle, die Teil
  594. weise noch Parameter haben.
  595.  
  596. Folgend Befehle werden erkannt:
  597.  
  598. REQUESTS ON/OFF:
  599. Wenn Fehler im Quelltext sind, erscheint normalerweise ein 
  600. Requester ("Fehler im Quellcode..."), der darauf aufmerk
  601. sam macht. Durch diesen Befehl kann der Requester unter
  602. drückt werden (OFF). Oder falls er unterdrückt war, kann 
  603. man ihn wieder einschalten (ON).
  604. DATEINAME 'Name':
  605. Dadurch wird der Dateiname übergeben.
  606.  
  607. START:
  608. Der Assemblerlauf wird gestartet.
  609.  
  610. BEENDEN:
  611. Der Assembler wird beendet, genauso als wenn im Menü der 
  612. Punkt Ende angewählt worden wäre.
  613.  
  614. Die Ausgabeformate:
  615.  
  616. ASCII ON/OFF:
  617. ASCII-datei erzeugen.
  618.  
  619. BINAER ON/OFF:
  620. Binärdatei erzeugen ein- oder ausschalten.
  621.  
  622. EPROM ON/OFF:
  623. Epromdatei erzeugen ein- oder ausschalten.
  624.  
  625. LISTING ON/OFF:
  626. Listing und Symboltabelle erzeugen ein- oder ausschalten.
  627.  
  628. Beispiel für eine Steuerung aus einer Shell:
  629. Zunächst muß der Assembler gestartet werden. Dann kann aus 
  630. einer Shell z.B. folgendes Kommando eingegeben werden:
  631.  
  632. rx "address REXX_Z80_0 DATEINAME XYZ.ASM"
  633.  
  634. Als Ergebnis sollte jetzt dieser Dateiname im Assembler 
  635. sichtbar werden.
  636.  
  637. Als weitere Beispiele existieren im Verzeichnis die Datei
  638. en: Assemble.rexx und AssOut.rexx. Diese Dateien können 
  639. aus dem Editor Ed aufgerufen werden und starten dann den 
  640. Assembler (Assemble.rexx) bzw. schalten verschiedene Aus
  641. gabeformate ein und starten dann den Assembler.
  642.  
  643.  
  644.  
  645.  
  646.  
  647.  
  648. 1.7    Ausgabeformate
  649. 1.7.1    Fehlermeldungen:
  650.  
  651. In die Datei "Z80Ass.err" (im gleichem Verzeichnis, in dem 
  652. der Assembler steht) werden alle Fehlermeldungen geschrie-
  653. ben. In einer Zeile werden alle wichtigen Informationen zu 
  654. einem Fehler ausgegeben. Also Datei, Zeile, Fehlernummer 
  655. und Fehlerursache als Klartext.
  656. Beispiel:
  657. Z80Lab1.asm: Zeile 6: Error 6: Befehl unbekannt
  658.  
  659.  
  660.  
  661.  
  662. 1.7.2    Listing:
  663. Der Dateiname wird vom Quellfile abgeleitet, jedoch mit 
  664. der Endung ".lst". Hier steht noch einmal Zeile für Zeile 
  665. der Quelltext, die Zeilennummer und der Maschinencode.
  666.  
  667.  
  668.  
  669.  
  670. 1.7.3    Symboltabelle:
  671. Der Dateiname wird vom Quellfile abgeleitet, jedoch mit 
  672. der Endung ".sym". Alle Label und Symbole werden mit den 
  673. dazugehörigen Werten aufgelistet. Diese Datei kann dann 
  674. z.B. in anderen Programmen wieder durch Include "xxx.sym" 
  675. wieder eingeladen werden, wenn diese Symbole mit diesen 
  676. Werten dort verwendet werden müssen.
  677.  
  678.  
  679.  
  680.  
  681.  
  682. 1.7.4    (Hex.) ASCII Datei:
  683. Der Dateiname wird vom Quellfile abgeleitet, jedoch mit 
  684. der Endung ".hex". Der Aufbau ist so gehalten, das z.B. 
  685. ein Monitorprogramm im Z80-(Einplatinen-)Computer diese 
  686. Datei eingeladen werden kann. Vorausgesetzt ein Monitor
  687. programm ist vorhanden und dieses Monitorprogramm kann 
  688. dieses Format verarbeiten.
  689.  
  690. Beispiel:
  691. ;0000cd4100.......
  692. ;001000c30000.....
  693.  
  694. Durch ';' wird jede Zeile eingeleitet. Die nächsten 2 By-
  695. tes bezeichnen die Adresse für die darauffolgenden Daten. 
  696. Dann folgen die Maschinendaten als Hexadezimale Zahlen 
  697. (insgesamt 16 Bytes pro Zeile).
  698.  
  699.  
  700.  
  701.  
  702.  
  703. 1.7.5    Binäre Datei:
  704. Der Dateiname wird vom Quellfile abgeleitet, jedoch mit 
  705. der Endung ".bin". Diese Datei enthält den Maschinencode 
  706. und eventuell auch Formatierungsanweisungen.
  707.  
  708.  
  709.  
  710.  
  711.  
  712. 1.7.6    Eprom Datei:
  713. Der Dateiname wird vom Quellfile abgeleitet, jedoch mit 
  714. der Endung ".epr". Diese Datei enthält nur den reinen Ma-
  715. schinencode. Es sind keinerlei Formatierungsanweisungen 
  716. oder sonstige Daten vorhanden. Diese Datei kann in  ein 
  717. EPROM gebrannt werden.
  718.  
  719.  
  720.  
  721.  
  722.  
  723.  
  724. 1.8    Fehlermeldungen
  725.  
  726.  
  727. Fehlernummer:    Bedeutung:
  728.  
  729.     1        Org-Direktive ohne Parameter
  730.             (es fehlt die Adresse)
  731.     2        EQU-Direktive ohne Parameter
  732.     3        EQU-Direktive ohne Label
  733.     4        QRG doppelt vorhanden
  734.             (Die Adresse existiert zweimal)
  735.     5        Falscher Parameter
  736.     6        Befehl unbekannt
  737.     7        Bereichsüberschreitung bei 1-Byte     
  738.             Argument
  739.     8        Bereichsüberschreitung bei 2-Byte 
  740.             Argument
  741.     10        Parameterübergabe falsch
  742.     11        Label doppelt definiert
  743.     12        Ausdruck zu lang
  744.             (es kann sich dabei eigentlich nur um
  745.              eine Formel handeln. Kürzen Sie den 
  746.              Ausdruck auf max. 25 Zeichen)
  747.     13        Zu viele Argumente
  748.     14        Ausdruck falsch
  749.     15        Division durch NULL
  750.     16        Unerlaubtes Zeichen in Formel
  751.     17        Kann Variable nicht finden
  752.     19        Überlagerung der Binärdaten
  753.             Abhilfe: Anpassung der Org-Anweisung, 
  754.              Beispiel siehe unten
  755.             (Bemerkung:
  756.              Dieser Fehler wird erst bei der 
  757.              nächsten ORG Anweisung bemerkt.)
  758.     20        Bufferüberlauf bei DS-Direktive
  759.             (Es können pro DS Anweisung nur 255 
  760.              Bytes reserviert werden. Sollen mehr 
  761.              Bytes reserviert werden müssen 
  762.              entsprechend viele DS Anweisungen 
  763.              angegeben werden)
  764.     21        Die Adresse, die bei der ROM-Direktive
  765.             angegeben wurde, ist höher als die 
  766.             kleinste Programmadresse. Dadurch kommt
  767.             es zu einem Konflikt mit dem Adressbereich
  768.             des EPROMS.
  769.     22        Es gibt mehr ENDM-Anweisungen als MAKRO-
  770.             Anweisungen!
  771.     23        Es wird versucht eine Makrodefinition in
  772.             einer Makrodefinition zu beginnen.
  773.     24        Der Makroname existiert bereits.
  774.     25        undefinierter Makroparameter.
  775.             Es existiert hinter einem BACKSLASH '\'
  776.             innerhalb einer Makrodefinition ein
  777.             unzulässiges Zeihen. Es sind nur die 
  778.             Zeichen '0' bis '9' erlaubt!
  779.  
  780. Beispiel zum Fehler 19:
  781.  
  782. Beispiellisting:
  783.  
  784.     org    1000H
  785.     db    1,2,3,4,5,6,7,8,9
  786.     org    1005H
  787.     ld    a,...
  788.     usw.
  789.     org    2000H
  790.     ld    (Ix+0),10
  791.     usw.
  792.  
  793. Dieses Listing führt zum Fehler 19. Die erste Anweisung 
  794. beginnt bei 1000H und belegt 9 Bytes = bis Adresse 1009H 
  795. (Tabelle 1 bis 9). Die nächste Org-Anweisung soll aber be-
  796. reits bei 1005H beginnen. Dort steht aber die Tabelle.
  797. (= Überlagerung der Binärdaten)
  798.  
  799. Bemerkung:
  800. Dieser Fehler wird erst bei nächsten org-Anweisung bemerkt 
  801. (bzw. bei Dateiende wenn keine Org-Anweisung mehr folgt) 
  802. hier in diesem Beispiel wird dieser Fehler erst in der 
  803. Zeile bemerkt, in der org 2000H steht.
  804.  
  805.  
  806.  
  807.  
  808.  
  809.  
  810. 2    Z80 Hilfesystem
  811. 2.1    Aufruf
  812.  
  813. Das Programm wurde bei der Installation des Assemblers mit 
  814. installiert. Gestartet wird dieses Programm durch Doppel
  815. klick auf das Icon Z80Hilfe. Es lädt dann die Datei 
  816. Z80Hilfe.txt, das sich im selben Verzeichnis befinden muß, 
  817. und öffnet dann ein Window.
  818.  
  819.  
  820.  
  821.  
  822. 2.2    Funktion
  823. Nachdem das Programm gestartet wurde, wird in einem Window 
  824. eine Auswahl angezeigt. Zur Zeit wird zu fast allen 
  825. Z80-Befehlen eine kurze Erklärung angezeigt. Dazu muß ein
  826. fach der Titel (Z80-Befehl) angeklickt werden, zu dem man 
  827. fragen hat. Dieses Programm soll praktisch ein Nachschla-
  828. gewerk zumindest teilweise ersetzen, um die Z80-Befehle zu 
  829. lernen, ist dieses Programm jedoch nicht geeignet!
  830. Wenn man sich die Informationen angesehen hat, kommt man 
  831. durch Anklicken von OK wieder zurück zum Hauptmenü.
  832.  
  833.  
  834.  
  835.  
  836.  
  837. 2.3    Aufbau der Z80Hilfe.txt-Datei
  838. Die Datei wurde durch einen normalen Editor erstellt und 
  839. kann auch jederzeit von Ihnen ergänzt oder verbessert wer-
  840. den.
  841. Um die Menüstruktur zu erzeugen existieren vier Befehle.
  842. - \title\
  843. - \subtitle\
  844. - \text\     und
  845. - \newline\
  846.  
  847. Bemerkung: der Befehle \language\ wird noch nicht unter
  848. stützt, er steht jedoch bereits in der Z80Hilfe.txt-Datei!
  849.  
  850. Jeder Befehl beginnt IMMER mit einem '\' und endet auch 
  851. wieder mit einem '\'. Die Befehle \title\ und \subtitle\ 
  852. untergliedern den Text wie in einem Buch mit einer 
  853. 'großen' Überschrift und mit 'kleineren' Überschriften. 
  854.  
  855. Nach diesen beiden Befehlen muß die Überschrift in '{', 
  856. '}' eingeschlossen werden.
  857.  
  858. Der Befehl \text\ steht dann nach einem \title\- oder nach 
  859. einem \subtitle\-Befehl. Nach dem \text\-Befehl steht dann 
  860. wiederum der Text, der später nach dem Anklicken der Über
  861. schrift angezeigt werden soll. Die Nummerierung, die im 
  862. Hauptmenü erscheint, wird automatisch generiert, und 
  863. braucht nicht weiter beachtet werden.
  864.  
  865. Da leere Zeilen ignoriert werden, muß der Befehl \newline\ 
  866. verwendet werden, wenn eine Leerzeile eingeschoben werden 
  867. soll. (Das gilt nur für den Text, und nicht für die Über-
  868. schriften!) Text, Befehle oder irgendwelche sonstigen Zei-
  869. chen nach dem \newline\-Befehl werden nicht beachtet!
  870.  
  871. Bemerkung:
  872.  
  873. - In einer Zeile darf maximal nur ein Befehl stehen!
  874. - Die TAB-Taste darf nicht verwendet werden!
  875.  
  876. Beispiel:
  877.  
  878. \title\{Das ist ein Test}
  879. \subtitle\{Das ist ein Untertitel}
  880. \text\{Hier könnte jetzt ein beliebiger Text stehen.
  881. \newline\
  882. Nach einer Leerzeile geht der Text hier weiter.}
  883.  
  884. \title\{Eine neue Überschrift}
  885. \text\{Auch nach 'title' darf ein 'text' stehen!}
  886.  
  887. usw.
  888.  
  889.  
  890.  
  891.  
  892.  
  893.  
  894. 3    Editor
  895. 3.1    Aufruf
  896.  
  897. Durch Doppelklick auf das Icon 'Editor' wird der Editor 
  898. gestartet. Es handelt sich dabei jedoch nicht um einen 
  899. mitgelieferten Editor, sondern es wird der Ed aufgerufen. 
  900. Dieser Editor (Ed) wird mit dem Betriebssystem 
  901. (Amiga-OS 2.04) geliefert. Eine genaue Anleitung zu diesem 
  902. Editor kann deshalb der Anleitung zum Amiga entnommen wer-
  903. den. (Anleitung zur Workbench und Anleitung: 
  904. AmigaDOS->Editoren)
  905.  
  906. Selbstverständlich kann auch ein anderer (besserer) Editor 
  907. verwendet werden.
  908.  
  909. Bemerkung: Aus Ed können AREXX-Programme aufgerufen wer-
  910. den. Dazu existieren im Verzeichnis Examples zwei AREXX-
  911. Programme: Assemble.rexx und AssOut.rexx. Werden diese 
  912. Programme aufgerufen, wird das derzeitig im Editor befind-
  913. liche Programm abgespeichert und wenn der Assembler be-
  914. reits aktiv ist, wird ein Assemblerlauf gestartet.
  915.  
  916.  
  917.  
  918.  
  919.  
  920.  
  921. 4    Anhang
  922. 4.1    Beispielprogramme
  923.  
  924. Die Beispielprogramme befinden sich im Verzeichnis Ex-
  925. amples.
  926.  
  927. Die Datei Test.asm enthält alle Befehle des Z80 und kann 
  928. zum Testen des Crossassemblers verwendet werden.
  929.  
  930. Die Datei TestIO.asm enthält ein Programm, das abwechselnd 
  931. die Zahl 00HEX und FFHEX in die Adresse 0 im IO-Bereich 
  932. schreibt. Wenn sich auf dieser Adresse eine 8-Bit Ausgabe 
  933. mit LEDs befindet, erhält man ein Blinklicht.
  934.  
  935. Die Datei TestIO2.asm enthält ein Lauflicht. Auch hier 
  936. wird auf die Adresse 0 im IO-Bereich zugegriffen.
  937.  
  938. Bemerkung: Die beiden Programme TestIO.asm und TestIO2.asm 
  939. sind für einen Z80-Computer entworfen, der:
  940.  
  941. 1. ein EPROM mit einem Adressbereich von 16 kByte hat.
  942. 2. das EPROM nach einem RESET an der Adresse 0 einblendet,
  943.    und beim ersten Zugriff auf eine Adresse zwischen 
  944.    C000Hex und FFFFHex das EPROM dann dauerhaft auf diesen
  945.    Adressbereich schaltet.
  946. 3. im IO-Bereich, Adresse 0 eine 8-Bit Ausgabe hat.
  947.  
  948.  
  949.